package com.shop.cereshop.commons.domain.huifu.req;


import lombok.Data;
import java.util.HashMap;
import java.util.Map;

@Data
public class HuifuParamsInfo {

    // 快速绑卡申请参数
    private String reqDate;                 // 请求日期
    private String reqSeqId;                // 请求流水号
    private String huifuId;                 // 汇付客户Id
    private String outCustId;               // 商户用户id
    private String orderId;                 // 订单号
    private String orderDate;               // 订单日期
    private String certType;                // 银行卡绑定证件类型
    private String certValidityType;        // 个人证件有效期类型
    private String certBeginDate;           // 个人证件有效期起始日
    private String certEndDate;             // 个人证件有效期到期日
    private String protocolNo;              // 挂网协议编号
    private String trxDeviceInf;            // 设备信息域
    private String cardId;                  // 银行卡号(密文)
    private String cardName;                // 银行卡开户姓名(密文)
    private String certId;                  // 银行卡绑定身份证(密文)
    private String cardMp;                  // 银行卡绑定手机号(密文)
    private String vipCode;                 // CVV2(密文)
    private String expiration;              // 卡有效期(密文)
    private String merchName;               // 商户名称
    private String email;                   // 电子邮箱

    // 一键绑卡参数
    private String bankId;                  // 银行号
    private String dcType;                  // 卡的借贷类型
    private String asyncReturnUrl;          // 异步请求地址

    // 银行卡查询参数
    private String bizType;                 // 业务类型

    /**
     * 转换为Map格式，用于API调用
     * @return
     */
    public Map<String, Object> toMap() {
        Map<String, Object> paramsInfo = new HashMap<>();

        // 添加非空参数
        if (reqDate != null) paramsInfo.put("req_date", reqDate);
        if (reqSeqId != null) paramsInfo.put("req_seq_id", reqSeqId);
        if (huifuId != null) paramsInfo.put("huifu_id", huifuId);
        if (outCustId != null) paramsInfo.put("out_cust_id", outCustId);
        if (orderId != null) paramsInfo.put("order_id", orderId);
        if (orderDate != null) paramsInfo.put("order_date", orderDate);
        if (certType != null) paramsInfo.put("cert_type", certType);
        if (certValidityType != null) paramsInfo.put("cert_validity_type", certValidityType);
        if (certBeginDate != null) paramsInfo.put("cert_begin_date", certBeginDate);
        if (certEndDate != null) paramsInfo.put("cert_end_date", certEndDate);
        if (protocolNo != null) paramsInfo.put("protocol_no", protocolNo);
        if (trxDeviceInf != null) paramsInfo.put("trx_device_inf", trxDeviceInf);
        if (cardId != null) paramsInfo.put("card_id", cardId);
        if (cardName != null) paramsInfo.put("card_name", cardName);
        if (certId != null) paramsInfo.put("cert_id", certId);
        if (cardMp != null) paramsInfo.put("card_mp", cardMp);
        if (vipCode != null) paramsInfo.put("vip_code", vipCode);
        if (expiration != null) paramsInfo.put("expiration", expiration);
        if (merchName != null) paramsInfo.put("merch_name", merchName);
        if (email != null) paramsInfo.put("email", email);
        if (bankId != null) paramsInfo.put("bank_id", bankId);
        if (dcType != null) paramsInfo.put("dc_type", dcType);
        if (asyncReturnUrl != null) paramsInfo.put("async_return_url", asyncReturnUrl);
        if (bizType != null) paramsInfo.put("biz_type", bizType);

        return paramsInfo;
    }
}
